package com.itheima.demo6collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.function.Consumer;

public class CollectionTraversalTest6 {
    public static void main(String[] args) {
//        目标：掌握认识并发修改异常问题，搞清楚每种遍历的区别
        ArrayList<String> list = new ArrayList<>();
        list.add("JAVA入门");
        list.add("JAVA基础");
        list.add("JAVAWeb");
        list.add("JAVA高级");
        list.add("JAVAEE");
        list.add("JAVA架构师");
        list.add("SQL");
        list.add("语文");
        list.add("数学");
        list.add("英语");
        for (int i= 0; i < list.size(); i++)
        {
            String s = list.get(i);
            if(s.contains("JAVA")){
                list.remove(s);
            }
        }
        System.out.println(list);//[JAVA基础, JAVA高级, JAVA架构师, SQL, 语文, 数学, 英语]删不干净
//      并发修改异常
        ArrayList<String> list2 = new ArrayList<>();
        list2.add("JAVA入门");
        list2.add("JAVA基础");
        list2.add("JAVAWeb");
        list2.add("JAVA高级");
        list2.add("JAVAEE");
        list2.add("JAVA架构师");
        list2.add("SQL");
        list2.add("语文");
        list2.add("数学");
        list2.add("英语");
        for (int i= 0; i < list2.size(); i++)
        {
            String s = list2.get(i);
            if(s.contains("JAVA")){
                list2.remove(s);
                i--;
            }
        }
        System.out.println(list2);//[JAVA基础, JAVA高级, JAVA架构师, SQL, 语文, 数学, 英语]删不干净
        ArrayList<String> list3 = new ArrayList<>();
        list3.add("JAVA入门");
        list3.add("JAVA基础");
        list3.add("JAVAWeb");
        list3.add("JAVA高级");
        list3.add("JAVAEE");
        list3.add("JAVA架构师");
        list3.add("SQL");
        list3.add("语文");
        list3.add("数学");
        list3.add("英语");
        System.out.println("list3="+list3);
//      解决方案2:倒着遍历并删除
        for (int i= list3.size()-1; i >=0; i--)
        {
            String s = list3.get(i);
            if(s.contains("JAVA")){
                list3.remove(s);
            }
        }
        System.out.println("list3="+list3);
        ArrayList<String> list4 = new ArrayList<>();
        list4.add("JAVA入门");
        list4.add("JAVA基础");
        list4.add("JAVAWeb");
        list4.add("JAVA高级");
        list4.add("JAVAEE");
        list4.add("JAVA架构师");
        list4.add("SQL");
        list4.add("语文");
        list4.add("数学");
        list4.add("英语");
        System.out.println("list4="+list4);

        Iterator<String> it = list4.iterator();
        while(it.hasNext()){
            String s = it.next();
            if(s.contains("JAVA")) {
//                list4.remove(s);
//                迭代器也存在并发修改异常问题
//                可以解决：使用迭代器自己的方法来删除
                it.remove();
            }
        }
        System.out.println("list4fdfgdag="+list4);
//      需求1：删除全部枸杞
//      方案二和方案三：用增强for和Lamada(都不能解决并发修改异常问题）
    }
}
